package utils

import (
	"encoding/json"
	"log"
	"os"
	"zinx/ziface"
)

/*
*
全局参数配置
*/
type GlobalObj struct {
	/**
	Server
	*/
	TcpServer ziface.IService // 当前Zinx全局的Server对象
	Host      string          //当前服务器主机监听的IP
	TcpPort   int             // 当前服务器主机监听的端口号
	Name      string          // 当前服务名称

	/*
		Zinx
	*/
	Version          string // 当前Zinx版本号
	MaxConn          int    // 当前服务器主机允许的最大链接数
	MaxPackageSize   uint32 // 当前Zinx框架数据包的最大值
	WorkerPoolSize   uint32 //当前业务工作池的Goroutine数量
	MaxWorkerTaskLen uint32 //Zinx框架允许用户最多的worker数量

}

/*
定义一个全局对外GlobalObj
*/
var GlobalObject *GlobalObj

/*
读取配置文件
*/
func (g *GlobalObj) Reload() {
	// 读取整个文件
	data, err := os.ReadFile("conf/zinx.json")
	if err != nil {
		log.Fatalf("无法读取文件: %v", err)
	}

	// 将json文件数据解析到struct
	err = json.Unmarshal(data, g)
	if err != nil {
		log.Fatalf("无法解析JSON数据: %v", err)

	}
}

/*
*
初始化GlobalObj
*/
func init() {
	//如果配置文件没有加载，使用默认值
	GlobalObject = &GlobalObj{
		Name:             "ZinxServerApp",
		Version:          "V0.4",
		TcpPort:          8999,
		Host:             "0.0.0.0",
		MaxConn:          1000,
		MaxPackageSize:   4096,
		WorkerPoolSize:   10,
		MaxWorkerTaskLen: 1024,
	}

	// 尝试从配置文件中获取配置
	GlobalObject.Reload()
}
